<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java 2D</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Java_2D"> <link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_2D rootpage-Java_2D skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Java 2D</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<p><b>Java 2D</b> is an <a href="API" title="API">API</a> for drawing <a href="Two-dimensional" class="mw-redirect" title="Two-dimensional">two-dimensional</a> <a href="Computer_graphics" title="Computer graphics">graphics</a> using the <a href="Java_(programming_language)" title="Java (programming language)">Java programming language</a>. Every Java 2D drawing operation can ultimately be treated as <i>filling</i> a <i>shape</i> using a <i>paint</i> and <i>compositing</i> the result onto the <a href="Computer_display" class="mw-redirect" title="Computer display">screen</a>.The Java 2D is a set of classes for advanced 2D graphics and imaging. It encompasses line art, text, and images in a single comprehensive model. The API provides extensive support for image compositing and alpha channel images, a set of classes to provide accurate color space definition and conversion, and a rich set of display-oriented imaging operators.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Organization">Organization</h2></div>
<p>The Java 2D API and its documentation are available for download as a part of JDK 6. Java 2D API classes are organised into the following packages in JDK 6:
</p>
<ul><li><i><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/package-summary.html">java.awt</a></code></i> The main package for the Java <a href="Abstract_Window_Toolkit" title="Abstract Window Toolkit">Abstract Window Toolkit</a>.</li>
<li><i><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/geom/package-summary.html">java.awt.geom</a></code></i> The Java standard library of two dimensional geometric shapes such as lines, ellipses, and quadrilaterals.</li>
<li><i><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/font/package-summary.html">java.awt.font</a></code></i> The library for manipulating <a href="Glyph" title="Glyph">glyphs</a> in Java.</li>
<li><i><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/color/package-summary.html">java.awt.color</a></code></i> The library dealing with the many different ways that color can be represented.</li>
<li><i><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/image/package-summary.html">java.awt.image</a></code></i> The library for manipulating graphical images.</li>
<li><i><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/print/package-summary.html">java.awt.print</a></code></i> The library of tools for writing to paper.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Basic_concepts">Basic concepts</h2></div>
<p>These objects are a necessary part of every Java 2D drawing operation.
</p>
<div class="mw-heading mw-heading3"><h3 id="Shapes">Shapes</h3></div>
<p>A <i>shape</i> in Java 2D is a boundary which defines an inside and an outside. <a href="Pixel" title="Pixel">Pixels</a> inside the shape are affected by the drawing operation, those outside are not.
</p><p>Trying to fill a straight <a href="Line_segment" title="Line segment">line segment</a> will result in no pixels being affected, as such a shape does not contain any pixels itself. Instead, a thin <a href="Rectangle" title="Rectangle">rectangle</a> must be used so that the shape contains some pixels.
</p>
<div class="mw-heading mw-heading3"><h3 id="Paints">Paints</h3></div>
<p>A <i>paint</i> generates the <a href="Color" title="Color">colors</a> to be used for each pixel of the fill operation. The simplest paint is <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/Color.html">java.awt.Color</a></code></b>, which generates the same color for all pixels. More complicated paints may produce gradients, <a href="Image" title="Image">images</a>, or indeed any combination of colors. Filling a circular shape using the color yellow results in a solid yellow circle, while filling the same circular shape using a paint that generates an image produces a circular cutout of the image.
</p>
<div class="mw-heading mw-heading3"><h3 id="Composites">Composites</h3></div>
<p>During any drawing operation, there is a <i>source</i> (the pixels being produced by the paint) and a <i>destination</i> (the pixels already onscreen). Normally, the source pixels simply overwrite the destination pixels, but the <i>composite</i> allows this behavior to be changed.
</p><p>The composite, given the source and destination pixels, produces the final result that ultimately ends up onscreen. The most common composite is <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/AlphaComposite.html">java.awt.AlphaComposite</a></code></b>, which can treat the pixels being drawn as partially transparent, so that the destination pixels show through to some degree.
</p>
<div class="mw-heading mw-heading3"><h3 id="Filling">Filling</h3></div>
<p>To <i>fill</i> a shape, the first step is to identify which pixels fall inside the shape. These pixels will be affected by the fill operation. Pixels that are partially inside and partially outside the shape may be affected to a lesser degree if <a href="Spatial_anti-aliasing" title="Spatial anti-aliasing">anti-aliasing</a> is enabled.
</p><p>The paint is then asked to generate a color for each of the pixels to be painted. In the common case of a solid-color fill, each pixel will be set to the same color.
</p><p>The composite takes the pixels generated by the paint and combines them with the pixels already onscreen to produce the final result.
</p>
<div class="mw-heading mw-heading2"><h2 id="Advanced_objects">Advanced objects</h2></div>
<p>These objects can be viewed as performing their duties in terms of the simpler objects described above.
</p>
<div class="mw-heading mw-heading3"><h3 id="Transform">Transform</h3></div>
<p>Every Java 2D operation is subject to a <a href="Affine_transformation" title="Affine transformation">transform</a>, so that shapes may be translated, rotated, sheared, and scaled as they are drawn. The active transform is most often the <b>identity transform</b>, which does nothing.
</p><p>Filling using a transform can be viewed as simply creating a new, transformed shape and then filling that shape.
</p>
<div class="mw-heading mw-heading3"><h3 id="Stroke">Stroke</h3></div>
<p>In addition to the <i>fill</i> operation, Java 2D provides a <i>draw</i> operation. While fill draws the interior of a shape, draw draws its outline. The outline can be as simple as a thin line, or as complicated as a dashed line with each dash having rounded edges.
</p><p>The object responsible for generating the outline is the <i>stroke</i>. Given an input shape, the stroke produces a new shape representing its outline. For instance, an infinitely thin line segment (with no interior) might be stroked into a one-pixel-wide rectangle.
</p><p>A draw operation can therefore be described as creating a new, stroked object and then filling that object.
</p><p>Technically speaking, the stroke is only required to accept an input shape and produce a new shape. The stroke implementation provided with Java 2D implements the outline rules described above, but a custom-written stroke could produce any shape it wished.
</p>
<div class="mw-heading mw-heading2"><h2 id="Optimizations">Optimizations</h2></div>
<p>Conceptually, drawing a straight black line in Java 2D can be thought of as creating a line segment, transforming it according to the current transform, stroking it to create a thin rectangle, querying this shape to compute the pixels being affected, generating the pixels using <b><code><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/java/javase/24/docs/api/java.desktop/java/awt/Color.html#BLACK">java.awt.Color.BLACK</a></code></b>, and then compositing the results onto the screen.
</p><p>However, performing this entire sequence of steps for each drawing operation would be very inefficient. Java 2D therefore optimizes common drawing operations so that many of these steps can be skipped. If the paint is a simple solid color, for instance, there is no need to actually command it to generate a list of colors to be painted. Likewise, if the default fully opaque composite is in use, actually asking it to perform the compositing operation is unnecessary and would waste effort.
</p><p>Java 2D performs the minimum amount of work necessary to make it <i>seem</i> as if it is performing all of these steps for each operation, therefore retaining both great flexibility and high performance.
</p>
<div class="mw-heading mw-heading2"><h2 id="Destination">Destination</h2></div>
<p>For simplicity, the textual examples provided in this article have assumed that the screen is the destination device. However, the destination can be anything, such as a printer, memory image, or even an object which accepts Java 2D graphics commands and translates them into <a href="Vector_graphics" title="Vector graphics">vector graphic</a> image files.
</p>
<div class="mw-heading mw-heading2"><h2 id="Java2D_/_OpenGL_interoperability">Java2D / OpenGL interoperability</h2></div>
<p>Since <a href="Java_SE_6" class="mw-redirect" title="Java SE 6">Java SE 6</a>, Java2D and <a href="OpenGL" title="OpenGL">OpenGL</a> have become interoperable, allowing, for example, the drawing of animated 3D graphics instead of icons on a Button (see <a href="Java_OpenGL#Java2D_/_OpenGL_interoperability" title="Java OpenGL">JOGL</a>).
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Java_3D" title="Java 3D">Java 3D</a></li>
<li><a href="Java_Class_Library" title="Java Class Library">Java Class Library</a></li>
<li><a href="Java_applet" title="Java applet">Java applet</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<p><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/8/docs/technotes/guides/2d/">.https://docs.oracle.com/javase/8/docs/technotes/guides/2d/</a>
</p>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://java.sun.com/javase/6/docs/technotes/guides/2d/">Java 2D Landing page</a> at <a href="Oracle_Corporation" title="Oracle Corporation">Oracle</a></li>
<li><a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/tutorial/2d/index.html">Java 2D Tutorial</a> at <a href="Oracle_Corporation" title="Oracle Corporation">Oracle</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" ยท ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Java_desktop71" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Java_desktop71" style="font-size:114%;margin:0 4em"><a href="Java_(software_platform)" title="Java (software platform)">Java</a> desktop</div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">APIs</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_Foundation_Classes" title="Java Foundation Classes">Java Foundation Classes</a></li>
<li><a href="Abstract_Window_Toolkit" title="Abstract Window Toolkit">Abstract Window Toolkit</a>
<ul><li><a href="Java_AWT_Native_Interface" title="Java AWT Native Interface">Java AWT Native Interface</a></li></ul></li>
<li><a href="Standard_Widget_Toolkit" title="Standard Widget Toolkit">Standard Widget Toolkit</a></li>
<li><a href="Java_3D" title="Java 3D">Java 3D</a></li>
<li><a href="Swing_(Java)" title="Swing (Java)">Swing</a>
<ul><li><a href="SwingWorker" title="SwingWorker">SwingWorker</a></li>
<li><a href="Pluggable_look_and_feel" title="Pluggable look and feel">Pluggable look and feel</a></li>
<li><a href="Synth_Look_and_Feel" title="Synth Look and Feel">synth Look and Feel</a></li></ul></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Deprecated APIs</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_applet" title="Java applet">Java applet</a></li>
<li><a href="Lightweight_User_Interface_Toolkit" title="Lightweight User Interface Toolkit">Lightweight User Interface Toolkit</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Open-source</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="JavaFX" title="JavaFX">JavaFX</a></li>
<li><a href="Java_OpenGL" title="Java OpenGL">Java OpenGL</a></li>
<li><a href="Java_Bindings_for_OpenGL" title="Java Bindings for OpenGL">Java Bindings for OpenGL</a></li>
<li><a href="Lightweight_Java_Game_Library" class="mw-redirect" title="Lightweight Java Game Library">Lightweight Java Game Library</a>
<ul><li><a href="LibGDX" title="LibGDX">libGDX</a></li></ul></li>
<li><a href="Application_Foundation_Classes" title="Application Foundation Classes">Application Foundation Classes</a></li>
<li><a href="Qt_Jambi" class="mw-redirect" title="Qt Jambi">Qt Jambi</a></li>
<li><a href="QuickTime_for_Java" title="QuickTime for Java">QuickTime for Java</a></li>
<li><a href="SwingLabs" title="SwingLabs">swingLabs</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-02-23" href="https://en.wikipedia.org/wiki/?title=Java_2D&oldid=1277229529">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>